haskell |
您所在的位置:网站首页 › pure land是什么意思 › haskell |
换句话说,是什么让语言变得纯粹? 例如,Smalltalk 被认为是一种纯面向对象的语言。 Haskell 和 Lisp 可以说是纯函数式语言。 当我们说纯粹时,这是否意味着它们不能用于其他编程范式(这与事实相去甚远),或者是否意味着它们被设计用于“纯粹”的 X 范式? 最佳答案 纯粹这个词在不同的上下文中有不同的含义。 函数式编程当人们谈论 Haskell 是一门纯语言时,他们的意思是它拥有 referential transparency .也就是说,您可以用它的值替换任何表达式而不改变程序的含义。例如,在 Haskell 中: square :: Int -> Int square x = x * x main = print (square 4)表达式 square 4 可以用它的值 (16) 替换而不改变程序的含义。另一方面,在这段 Java 代码中: public int square(int x) { System.out.println("Done!"); return (x*x); } public static void main(String [] args) { System.out.println(square(4)); }你不能用它的值 (16) 替换 square(4) 因为它会改变程序的意义 - 它不会再打印 Done! 到标准输出。在 Haskell 中,函数不可能有副作用,例如打印到标准输出或更改内存位置,因此强制执行引用透明性。 请注意,对于纯粹的这种含义,Lisp 不是一种纯函数式语言,因为它的函数可能有副作用(如果你想挑剔的话,Haskell 不是一种纯函数式语言,因为unsafePerformIO 的存在,但每个人都知道,如果您使用该函数,您将陷入更恶劣的 hell 圈之一)。 当然,在不纯的语言中采用纯风格总是有可能的,许多程序员会这样做是为了更容易推理他们的程序。只是引用透明性不是由编译器强制执行的,因为它是在纯语言中。 纯函数式语言的例子包括 Haskell , Clean和 Miranda .不纯函数式语言的示例包括 OCaml , F#和 Scheme . 面向对象编程当人们谈论 Smalltalk 或 Ruby 是一种纯面向对象的语言时,他们的意思是对象和原始值之间没有区别。在 Smalltalk 和 Ruby 中,整数、 bool 值和字符等值也是对象,因为它们可以接收消息 (Smalltalk) 或具有方法 (Ruby)。例如,你可以这样做 1.to_s在 Ruby 中,即调用整数 1 的方法将其转换为字符串。将其与像 Java 这样的“不纯”OO 语言进行比较,其中有对象(类的实例,并且可以有方法等)和原始值(例如 int、double, bool,不能有方法)。 当 OO 语言是纯语言时,人们常说“一切都是对象”,这并非严格意义上的正确(例如,if 语句不是对象)但是正确地说“每个值都是一个对象”。 纯面向对象语言的例子包括Ruby和 Smalltalk .不纯的面向对象语言的示例包括 Java和 C++ . 关于haskell - 在编程语言和范例的上下文中, "Pure"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607927/ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |